iT邦幫忙

2023 iThome 鐵人賽

DAY 24
1
Security

Windows Security 101系列 第 24

[Day24] Introduction to Logical Privilege Escalation on Windows (Part 1): Path Canonicalization

  • 分享至 

  • xImage
  •  

這幾篇的內容除了複習 James Forshaw 在 2017 的 workshop Introduction to Logical Privilege Escalation on Windows,還會加入一些我知道的有趣手法。

今天這篇想講的是 Windows 在 File System 的 Path Canonicalization (or Path Nornalization),也就是 Windows 如何解析這些路徑,在解析的過程中又有哪些是會被濫用的設計。(其實會有種在繞 WAF 的感覺 XD)

Path Canonicalization

根據 James Forshaw 的投影片,告訴了我們以下內容:

Important Object Directories

之前我曾經介紹過 Windows 中有各式各樣的 Objects,而這些 Objects 實際上是有 namespace 的管理機制,讓系統和使用者能夠以不同的形式存取相同的 object。

以下是一些常見的重要 Object Directories:

  • \Device
    • Kernel Driver Device Objects 的預設路徑
  • \GLOBAL
    • Device 的 Symbolic Link 的路徑
  • \BaseNamedObjects
    • Named Resources 的路徑
  • \Sessions\X
    • Login Session X 的目錄
  • \Session\0\DosDevices
    • 登入使用者的DosDevices 目錄
  • \??
    • 指向登入使用者的DosDevices 目錄

Win32 Path Support

Windows 也會有以下路徑表示的方式:

  • some\path
    • 相對路徑
  • C:\some\path
    • 絕對路徑
  • \\.\C:\some\path
    • canonicalized 的 device 路徑
  • \\?\C:\some\path
    • non-canonicalized 的 device 路徑
  • \\server\share\path
    • sever 的 share 目錄的 UNC 路徑

File Path Handling

在檔案路徑解析的過程中,路徑會被不斷地轉換:

https://ithelp.ithome.com.tw/upload/images/20231008/20120098vLXuJXlr3D.png

(ref: https://archive.conference.hitb.org/hitbsecconf2017ams/sessions/hitb-lab-introduction-to-windows-logical-privilege-escalation/)

Canonicalization

投影片中也提到了,一些路徑轉換的結果:

  • c:\path\../badgersc:\badgers
  • c:\..\d:/badgersc:\d:\badgers
  • \\.\c:\path\../badgersc:\badgers
  • \\.\c:\..\d:/badgersd:\badgers
  • \\?\c:\..\d:/badgersc:\path\../badgers

另外,我也發現了這些轉換:

  • 短路徑
    • C:\progra~1\C:\Program Files\
    • C:\progra~2\C:\Program Files (x86)\
  • 過濾空白
    • C:\Windows \C:\Windows\
  • 斜線轉換反斜線
    • C:/Windows\C:\Windows\

知道這些等價的路徑轉換可以讓我們在不同的架構中嘗試如何繞過一些限制或防護。

Symbolic Link / Hard Link / Junctions

在 Windows NTFS 中還有一個有趣的機制 Symbolic Link。

然而我們很常將 Symbolic Link, Hard Link, Junctions 混為一談,根據這篇文章,分別比較他們的不同:

  • Symbolic Link
    • 適用於 file 和 directory
    • 可以是任何路徑,包括 SMB 路徑
    • 刪除 Link 不影響檔案
  • Junctions
    • 適用於 directory
    • 使用 NTFS 的 reparse point
    • 連結的路徑是以絕對路徑儲存
    • 可以是不同 volumes
    • 刪除 Link 不影響檔案
  • Hard Link
    • 適用於 file
    • 必須是同個 volume
    • 只有全部的 Link 刪除時,才會刪除檔案
      • 但實驗後發現不會 ???

可以使用 mklink.exe 來建立這三種 Link

https://ithelp.ithome.com.tw/upload/images/20231008/20120098M0TRriMTrN.png

在 folder1 新增一個 aaa.txt 內容是 aaa,並新增3種 Link,印出內容

https://ithelp.ithome.com.tw/upload/images/20231008/20120098rUsFSvGi9B.png

將 folder1\aaa.txt 移動到 folder2\aaa.txt 後,只有 hardlink 還可以印出檔案

https://ithelp.ithome.com.tw/upload/images/20231008/20120098gB0Nqs4J1R.png

然而將3個 Link 刪除後並不會刪除 folder1\aaa.txt

LoadLibrary

LoadLibrary 會負責將 DLL 載入當前 Process 的 memory,並且會傳載入後的 imagebase。

然而 LoadLibrary 本身的設計會有一些問題:

  • 在 LoadLibrary 中會自動在字串末端沒有 .dll 的話會補上 .dll
    • 也就是說 LoadLibrary("kernel32")LoadLibrary("kernel32.dll") 得到的效果是一樣的
  • 俗稱 DLL Sideloading 的 DLL Search Order Hijacking (由上到下)
    • The directory from which the application loaded
    • The system directory
    • The 16-bit system directory
    • The Windows directory
    • The current directory
    • The directories that are listed in the PATH environment variable

然而在實際應用上,根據不同的情境會有不同的效果,很多的路徑轉換只侷限在該 Windows API 中,像是 PrinterSpoofer 的 NamedPipe impersonate 或是 Mini-Filter 對 NTFS reparsing point 的處理都會有不同的濫用方法。

下一篇,我將會介紹在 Windows 中的 TOCTOU 攻擊方式!

References


上一篇
[Day23] Exception Handler
下一篇
[Day25] Introduction to Logical Privilege Escalation on Windows (Part 2): TOCTOU
系列文
Windows Security 10130
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言